// src/utils/request.js

import axios from 'axios';
// 如果您使用 Naive UI 或其他UI库，可以引入它的消息提示组件
import { useMessage } from 'naive-ui'; 

// 创建一个 Axios 实例
const service = axios.create({
  // 从环境变量中获取基础API路径
  baseURL: import.meta.env.VITE_API_BASE_URL,
  // 所有请求都设置为POST
  method: 'post',
  // 请求超时时间 (例如: 10秒)
  timeout: 10000,
});

// --- 请求拦截器 ---
// 未来可以在这里统一处理请求头，例如添加认证token
service.interceptors.request.use(
  config => {
    // 示例：如果存在token，则添加到请求头
    // const token = localStorage.getItem('token');
    // if (token) {
    //   config.headers['Authorization'] = `Bearer ${token}`;
    // }
    return config;
  },
  error => {
    console.error('Request Error:', error); // for debug
    return Promise.reject(error);
  }
);

// --- 响应拦截器 ---
// 这里是关键，用于处理您定义的统一响应格式
service.interceptors.response.use(
  /**
   * response => response.data 拿到的是后端返回的完整JSON:
   * { "code": 200, "message": "...", "data": {...} }
   */
  response => {
    const res = response.data;

    // 如果 code 不是 200, 就判断为错误
    if (res.code !== 200) {
      // 使用UI库的消息提示组件显示错误信息
      // 注意：useMessage 必须在 setup 脚本中使用，这里仅为示意
      // 在实际项目中，您可能需要创建一个全局的消息服务来处理
      alert(`错误: ${res.message || '未知错误'}`); // 简单 alert 示例
      
      // 401: 未授权; 500: 服务器错误 等，可以根据code做特殊处理
      // 例如：if (res.code === 401) { ...跳转到登录页 }

      return Promise.reject(new Error(res.message || 'Error'));
    } else {
      // 如果 code 是 200，我们直接返回 res.data
      // 这样在组件中调用API时，.then(data => ...) 里的 data 就是后端返回的 data 字段
      return res.data;
    }
  },
  error => {
    console.error('Response Error:', error); // for debug
    alert(`网络错误: ${error.message}`);
    return Promise.reject(error);
  }
);

export default service;